home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 41
/
Aminet 41 (2001)(Schatztruhe)[!][Feb 2001].iso
/
Aminet
/
comm
/
tcp
/
samba_2.0.7.lha
/
source
/
amiga_rcs
/
Assert.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-12-25
|
8KB
|
440 lines
head 1.3;
access;
symbols
V1_19:1.3
V1_18:1.2
V1_15:1.2
V1_12:1.1
V1_11:1.1
V1_10:1.1
V1_9:1.1
V1_8:1.1
V1_7:1.1
V1_6:1.1
V1_5:1.1
V1_4:1.1
V1_3:1.1
V1_2:1.1
V1_1:1.1;
locks
olsen:1.3; strict;
comment @ * @;
1.3
date 2000.12.25.11.49.15; author olsen; state Exp;
branches;
next 1.2;
1.2
date 2000.05.22.19.10.25; author olsen; state Exp;
branches;
next 1.1;
1.1
date 99.02.06.12.18.32; author olsen; state Exp;
branches;
next ;
desc
@.
@
1.3
log
@.
@
text
@/*
* $Id: Assert.c 1.2 2000/05/22 19:10:25 olsen Exp olsen $
*
* :ts=8
*
* AmigaOS wrapper routines for Samba 2.0.0, using the AmiTCP V3 API
* and the SAS/C V6.58 compiler.
*
* Copyright (C) 1999-2000 by Olaf `Olsen' Barthel <olsen@@sourcery.han.de>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
/****************************************************************************/
#include <dos/dos.h>
#include <clib/exec_protos.h>
#include <clib/dos_protos.h>
#include <pragmas/exec_pragmas.h>
#include <pragmas/dos_pragmas.h>
#include <string.h>
extern struct Library * SysBase;
extern void kprintf(const char *,...);
extern void __stdargs kputc(char c);
/****************************************************************************/
#include <stdarg.h>
/****************************************************************************/
#define DEBUGLEVEL_OnlyAsserts 0
#define DEBUGLEVEL_Reports 1
#define DEBUGLEVEL_CallTracing 2
/****************************************************************************/
static int indent_level = 0;
static int debug_level = DEBUGLEVEL_CallTracing;
static char program_name[40];
static int program_name_len = 0;
/****************************************************************************/
void
_SETPROGRAMNAME(char *name)
{
if(name != NULL && name[0] != '\0')
{
program_name_len = strlen(name);
if(program_name_len >= sizeof(program_name))
program_name_len = sizeof(program_name)-1;
strncpy(program_name,name,program_name_len);
program_name[program_name_len] = '\0';
}
else
{
program_name_len = 0;
}
}
/****************************************************************************/
int
_SETDEBUGLEVEL(int level)
{
int old_level = debug_level;
debug_level = level;
return(old_level);
}
/****************************************************************************/
static int previous_debug_level = -1;
void
_PUSHDEBUGLEVEL(int level)
{
previous_debug_level = _SETDEBUGLEVEL(level);
}
void
_POPDEBUGLEVEL(void)
{
if(previous_debug_level != -1)
{
_SETDEBUGLEVEL(previous_debug_level);
previous_debug_level = -1;
}
}
/****************************************************************************/
void
_INDENT(void)
{
if(program_name_len > 0)
kprintf("(%s) ",program_name);
if(debug_level >= DEBUGLEVEL_CallTracing)
{
int i;
for(i = 0 ; i < indent_level ; i++)
kprintf(" ");
}
}
/****************************************************************************/
void
_SHOWVALUE(
unsigned long value,
int size,
const char *name,
const char *file,
int line)
{
if(debug_level >= DEBUGLEVEL_Reports)
{
char *fmt;
switch(size)
{
case 1:
fmt = "%s:%ld:%s = %ld, 0x%02lx";
break;
case 2:
fmt = "%s:%ld:%s = %ld, 0x%04lx";
break;
default:
fmt = "%s:%ld:%s = %ld, 0x%08lx";
break;
}
_INDENT();
kprintf(fmt,file,line,name,value,value);
if(size == 1 && value < 256)
{
if(value < ' ' || (value >= 127 && value < 160))
kprintf(", '\\x%02lx'",value);
else
kprintf(", '%lc'",value);
}
kprintf("\n");
}
}
/****************************************************************************/
void
_SHOWSTRING(
const char *string,
const char *name,
const char *file,
int line)
{
if(debug_level >= DEBUGLEVEL_Reports)
{
_INDENT();
kprintf("%s:%ld:%s = 0x%08lx \"%s\"\n",file,line,name,string,string);
}
}
/****************************************************************************/
void
_SHOWMSG(
const char *string,
const char *file,
int line)
{
if(debug_level >= DEBUGLEVEL_Reports)
{
_INDENT();
kprintf("%s:%ld:%s\n",file,line,string);
}
}
/****************************************************************************/
void
_DPRINTF_HEADER(
const char *file,
int line)
{
if(debug_level >= DEBUGLEVEL_Reports)
{
_INDENT();
kprintf("%s:%ld:",file,line);
}
}
static void __asm
putch(register __d0 c)
{
if(c != '\0')
kputc(c);
}
void
_DPRINTF(const char *fmt,...)
{
if(debug_level >= DEBUGLEVEL_Reports)
{
va_list args;
va_start(args,fmt);
RawDoFmt((char *)fmt,args,(VOID (*)())putch,NULL);
va_end(args);
kprintf("\n");
}
}
/****************************************************************************/
void
_ENTER(
const char *file,
int line,
const char *function)
{
if(debug_level >= DEBUGLEVEL_CallTracing)
{
_INDENT();
kprintf("%s:%ld:Entering %s\n",file,line,function);
}
indent_level++;
}
void
_LEAVE(
const char *file,
int line,
const char *function)
{
indent_level--;
if(debug_level >= DEBUGLEVEL_CallTracing)
{
_INDENT();
kprintf("%s:%ld: Leaving %s\n",file,line,function);
}
}
void
_RETURN(
const char *file,
int line,
const char *function,
unsigned long result)
{
indent_level--;
if(debug_level >= DEBUGLEVEL_CallTracing)
{
_INDENT();
kprintf("%s:%ld: Leaving %s (result 0x%08lx, %ld)\n",file,line,function,result,result);
}
}
/****************************************************************************/
void
_ASSERT(
int x,
const char *xs,
const char *file,
int line,
const char *function)
{
#ifdef CONFIRM
{
STATIC BOOL ScrollMode = FALSE;
STATIC BOOL BatchMode = FALSE;
if(BatchMode == FALSE)
{
if(x == 0)
{
kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
file,
line,
xs,
function);
if(ScrollMode == FALSE)
{
ULONG Signals;
SetSignal(0,SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
kprintf(" ^C to continue, ^D to enter scroll mode, ^E to enter batch mode\r");
Signals = Wait(SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
if(Signals & SIGBREAKF_CTRL_D)
{
ScrollMode = TRUE;
kprintf("Ok, entering scroll mode\033[K\n");
}
else if (Signals & SIGBREAKF_CTRL_E)
{
BatchMode = TRUE;
kprintf("Ok, entering batch mode\033[K\n");
}
else
{
/* Continue */
kprintf("\033[K\r");
}
}
}
}
}
#else
{
if(x == 0)
{
_INDENT();
kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
file,
line,
xs,
function);
}
}
#endif /* CONFIRM */
}
@
1.2
log
@.
@
text
@d2 1
a2 1
* $Id: Assert.c 1.1 1999/02/06 12:18:32 olsen Exp olsen $
d6 1
a6 1
* AmigaOS wrapper routines for Samba 2.0.0, using the AmiTCP V4 API
@
1.1
log
@.
@
text
@d9 1
a9 1
* Copyright (C) 1999 by Olaf `Olsen' Barthel <olsen@@sourcery.han.de>
@